package Day023_设计模式_动态代理.demo2_多例设计模式;

import java.util.ArrayList;
import java.util.Random;

/**
 * @author zhangyan
 * @date 2020/5/17 9:50
 */
public class Test {
    public static void main(String[] args) {

        for (int i = 0; i < 10; i++) {
            Person p = Person.getInstance();
            System.out.println(p);
            //只有三个对象随机产生
        }
    }
}

class Person{

    //构造方法私有化,不能在外部通过new创建对像
    private Person() {
    }
    //在内部产生固定数量的实例化对象 --> 只产生一次固定数量对象 --> 静态代码块(随着类的加载而执行,且只执行一次)

    //定义一个存放对象的集合
    private static ArrayList<Person> list = new ArrayList();

    //静态代码块中创建对象 添加到集合
    static {
        for (int i = 0; i < 3; i++) {
            Person p = new Person();
            list.add(p);
        }
    }

    //提供静态方法
    public static Person getInstance(){
        //创建随机数
        Random ran = new Random();
        //随机数作为索引,取出对应的list集合中的对象
        int i = ran.nextInt(list.size()); //[0,3)
        //根据索引取出对象
        Person p = list.get(i);

        return p;
    }
}